/*
 * Zed Attack Proxy (ZAP) and its related class files.
 * 
 * ZAP is an HTTP/HTTPS proxy for assessing web application security.
 * 
 * Copyright 2012 The ZAP Development team
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0 
 *   
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 */
package org.zaproxy.zap.extension.anticsrf;

import org.parosproxy.paros.model.HistoryReference;
import org.parosproxy.paros.network.HttpRequestHeader;
import org.zaproxy.zap.extension.api.API;
import org.zaproxy.zap.utils.DesktopUtils;
import org.zaproxy.zap.view.popup.PopupMenuItemHistoryReferenceContainer;

public class PopupMenuGenerateForm extends PopupMenuItemHistoryReferenceContainer {

	private static final long serialVersionUID = 1L;
	
    /**
     * Constructs a {@code PopupMenuGenerateForm} with the given label.
     * 
     * @param label the text shown in the pop up menu
     */
    public PopupMenuGenerateForm(String label) {
    	super(label);
    }

	@Override
	public void performAction(HistoryReference href) {
		// Redirect to the form generated by the API
		DesktopUtils.openUrlInBrowser(AntiCsrfAPI.getAntiCsrfFormUrl(href.getHistoryId()));
	}

	@Override
    public boolean isButtonEnabledForHistoryReference (HistoryReference href) {
		if (API.getInstance().isEnabled() && DesktopUtils.canOpenUrlInBrowser()) {
			try {
				if (HttpRequestHeader.POST.equals(href.getMethod()) && href.getRequestBodyLength() > 0) {
					return true;
				}
			} catch (Exception e) {
				// Ignore - this is 'just' for a right click menu
			}
		}
		return false;
    }

}
